package 算法.leetcode.offer.nk;

import 算法.leetcode.offer.base.ListNode;

/**
 * 判断给定的链表中是否有环。如果有环则返回true，否则返回false。
 *
 *
 * 数据范围：链表长度 0 ≤n≤10000，链表中任意节点的值满足 |val| <= 1000000
 * 要求：空间复杂度 O(1)，时间复杂度 O(n)
 *
 * 输入分为两部分，第一部分为链表，第二部分代表是否有环，然后将组成的head头结点传入到函数里面。-1代表无环，
 * 其它的数字代表有环，这些参数解释仅仅是为了方便读者自测调试。实际在编程时读入的是链表的头节点。
 * @author lchenglong
 * @date 2022/3/22
 */
public class BM6 {
    public boolean hasCycle(ListNode head) {
        if(head == null)return false;
        ListNode fast=head,slow = head;
        while(fast.next!=null&&fast.next.next!=null){
            fast = fast.next.next;
            slow =slow.next;
            if(fast == slow)
                return true;
        }
        return false;
    }
}
